package com.ftg.learn.chapter04;

import com.ftg.learn.chapter02.dao.UserDao;
import com.ftg.learn.chapter04.dao.StudentDao;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 *  动态代理  ：
 * 切面 ： 就是对多个目标类发起关注的类，通常使用@Aspect来修饰
 *      最好的切面的例子就是事务 .
 *      1 ： 要在方法 开始之前 setAutocommit(false)  手动提交  around
 *      2 ： 执行你自己真实业务代码
 *      3 ： 成功我们要提交 around
 *      4 ： 失败了我们要回滚 (afterthrow)
 * 连接点 ： 程序执行过程中的一个点，如方法的执行或异常的处理。在Spring AOP中，连接点始终表示方法执行。
 *   切面类，关注目标里面的方法 ，目标类里的方法执行过程叫连接点 joinPoint 切面类里面的方法上面的参数
 * 通知 ： 一个方面在特定连接点采取的行动。 让切面采取的、执行方法
 *   通知的分类 ： “周围Around”、“之前Before”和“之后After”
 * 切点：目标类当中某一个在执行方法(连接点)。
 * 目标对象：由一个或多个切面管理的对象。因此该对象始终是代理对象。 产生了一个proxy
 * AOP代理：由AOP框架创建的对象，用于实现切面面契约（建议方法执行等）。
 *      在Spring Framework中，AOP代理是JDK动态代理或CGLIB代理。
 * 织入： 就是把切面类里面的方法 通过 通知织入到目标类里面的切点前，后，周围的过程 我们叫织入
 * @author kangjx
 * @date 2022/11/7
 */
public class LearnAspect {

    //代码实现了 ，下午来搞

    public static void main(String[] args) {
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
        applicationContext.scan("com.ftg.learn.chapter04");
        applicationContext.refresh();

        //调用者  无关
        StudentDao studentDao = applicationContext.getBean(StudentDao.class);
        System.out.println(studentDao.createStudent("abc",23));
    }



}
